Zum Hauptinhalt springen

dplus GUI Entkopplung

Komponenten

Die meisten Komponenten werden mittels von MultiEdit gelöst. Sprich eine Komponenten um alle “normalen” Eingabefelder zu lösen. Dabei sind folgende Bedingungen wichtig.

  • Bei Eingabe eines nicht typgerechten Wertes wird der alte Wert wieder in das Control geschrieben und das Control mit einem roten Rahmen markiert.
  • Eine Erstellung von Komponenten zur Laufzeit sollte auch möglich sein.
    Wir haben in einigen Bereichen Felder die wir je nach Konfiguration einblenden.
  • Das rot markieren bzw. falscher Wert markieren muss auch aus dem Code möglich sein.
  • Das Control hat zwei Eigenschaften zum Binden.
    • DataMember
    • DataMeberID
  • Das Datum unterstützt folgende Eingaben
    • § H -> Heute
    • § G -> Gestern,
    • § M -> Morgen
    • § 12 -> 12.AktuellesMonat.Aktuelles Jahr
    • § 12.03,1203 -> 12.03. Aktuelles Jahr
    • § +3 -> Heute + 3 Tage
    • § -3 -> Heute – 3 Tage
    • § MO -> Montag diese Woche usw.
  • Die Änderung eines Wertes im Control wird beim OnExit an das Modell weitergegeben.
  • Die Änderung eines Wertes im Control wird beim “Enter” an das Modell weitergegeben.
  • Leerer Wert in Control entspricht bei einer nullable Eigenschaft immer einer NULL im Modell. Ansonsten wird ein default Wert eingesetzt bei einer NICHT nullable Eigenschaft.
    • Datetime: 31.12.1899 00:00:00.0000
    • Date: 31.12.1899
    • Integer: 0
    • Decimal: 0
    • String: Leerstring

Ereignisse/Events

  • Modell: OnPropertyChange:
    • Die Abfrage ob in einem Feld etwas geändert wurde, ist aktuell auf zwei Arten möglich im Model.
      • OnPropertyChange: Der Wert wurde bereits am Modell geändert
      • OnPropertyChanging: Der Wert wurde noch nicht am Modell geändert.
        Hier fehlt jedoch noch der “Neue Wert”.
  • MultiEdit: OnChange
    • Diese Implementation fehlt noch.
    • Sollte beim Exit und beim Key:Enter funktionieren, aber nur wenn sich ein Wert geändert hat.
    • Übergabe von Model, Alt, ref Neu, ref Accept, ControlType
    • Sollte nur bei einer Eingabe des Benutzer ausgelöst werden, nicht bei Änderung des Wertes im Code (Control und Modell)

Binding

  • Datamember: Eigenschaftsname des Modells für den Text
  • DatamemberID: Eigenschaftsname des Modells für die ID
  • Schema: Hier wird das komplette Schema aller Felder zugewiesen.
    Jedoch wird auf das richtige Schema mittels Datamember zugegriffen.
  • DataSource: Zuweisung des Modells bzw. einer Liste von Modellen

Schema

  • Das Schema kann einmal aus der Datenbank ausgelesen werden, gleich wie das Model. Aktuell ist ein eigener Roundtrip dafür notwendig.
  • Das Schema kann vom Entwickler auch komplett manuell erstellt werden.
  • Im Schema befinden sich aktuell auch die Grid Spalten Einstellungen
    • Breite
    • Überschrift
  • Aktuell wird das Schema, bei ähnlichen Objekten und JOINS immer wieder gemacht was eine Redundanz der Eingaben bedeutet. Eine etwas andere Lösung können wir jedoch generalisieren.
    • Z.B. defaultSchema.getSchema(OB_OBJEKT)
    • Wäre es vielleicht möglich die Schema-Felder zentral zu halten?
      • Dann bräuchten wir jedoch eine Zuordnung zur zentralen Haltung.
      • dbo.NET_OBJEKT.OB_OBJEKT
      • Das System führt die SQL Anweisung aus und holt sich über die zentrale Haltung das Schema?

Positionierung

  • Wir haben uns auf eine Raster-Positionierung geeinigt. Sprich ein Raster wobei die Linien fiktiv mit eingerechnet werden.
    • Einfach zum Positionieren
    • Elemente immer in der Flucht
    • Trotzdem noch Flexibilität bei der Größe (Width = Size * Raster)
    • Sollte mit jedem GUI Framework umsetzbar sein
    • Kann sehr einfach vergrößert und verkleinert werden.
      Dies kann im Grid als auch im Rasterlayout ident implementiert werden.
    • Sehr hohe Performance bei Verwendung eines nativen Grids

Icons

Weitere Ziele

  • Einigung auf den Lösungsansatz
    • BAF testet die Performance bzw. Umsetzbarkeit von Telerik HTMLGridView
  • Umsetzung aller notwendigen Controls
  • Umsetzung von Sektionen/Bereichen im Rasterlayout
  • Einfärbung von Labes implementieren
  • Shortcuts umsetzen
  • Permission-Manager umsetzen
  • Umsetzung von 3 Referenz Dialogen
    • Person
    • Auftrag
    • Interessent mit Indiv Felder aus Konfig

Controls

Combobox

Im Gridlayout ist es die Frage ob wir die Combobox wirklich als Combobox implementieren. Wir könnten stattdessen ein Eingabefeld mit einem zusätzlichen Button nehmen und dem entsprechendem Icon. Im Normalfall ist das Eingabefeld Readonly, über die Schaltfläche können wir dann mit einem Dropdown bzw. oder auch mit einem weiteren Dialog arbeiten.

  • Man kann dann den Wert aus dem Feld immer rauskopieren.
  • Wenn es nur eine Auswahl ist, dann den Tabstop beim Feld auf false setzen.
  • Wenn es Auswahl und Eingabe ist, dann wird das Editfeld einfach auf nicht readonly gesetzt. Es kann einfach eine Eingabe gemacht werden. Zusätzlich kann direkt der Button verwendet werden.
  • Nachteil wäre die direkte Eingabe + automatische Suche, aber dies könnte auch mit einer Eingabe und anschließendem Tab gelöst werden. Danach kommt die Auswahl.
    Hier braucht man aber verschiedene Modi.